OktaとAWS SSOを使った属性値によるアクセスコントロールを試してみた
以前、OktaとAWS SSOの連携をご紹介しました。今回はその延長線上で、oktaのユーザー属性を使ったアクセス制限を試してみました。属性値に応じてstart/stopできるインスタンスを制限します。
Oktaコンソールで属性値を設定
Okta管理コンソールを開きます。Applicationsから、AWS Single Sign-On appを開き、Sign Onタブを開きます。SAMLセクションのAttributes (Optional)を開きます。
今回はDepartment(部署)でアクセス制限することにしました。その場合、Nameに「https://aws.amazon.com/SAML/Attributes/AccessControl:Department」と入力します。Department部分は使用する属性に変更してください。Name formatは「URI reference」とし、Valueは「user.department」とします。こちらも"department"部分を使用する属性値にあわせて変更します。入力後、Saveします。
Oktaユーザーの属性値の設定
Okta管理コンソールからユーザーの属性値を設定します。Directory>People>Profileを開き、Departmentを設定します。
AWS SSOコンソールを開き、Usersから属性値を確認すると反映されたかを確認できます。
属性値コントロールの有効化
AWS SSOコンソールの設定から、Attributes for access controlを有効にします。
パーミッションセットの作成
AWS SSOコンソールのAWS accounts>Create permission setを選択します。属性値を使ったパーミッションセットを作るので、Create a custom permission setを選びます。
custom permissions policyに以下の内容を入力します。ec2:ResourceTag/Departmentタグが一致する場合にstart/stopを許可するポリシーです。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "*", "Condition": { "StringEquals": { "ec2:ResourceTag/Department": "${aws:PrincipalTag/Department}" } } } ] }
作成したパーミッションセットのAWS accountsタブ>アカウント名を開きます。
ユーザーのパーミッションセットを作成したものに変更します。
EC2にDepartmentタグを割り当て、OktaユーザーがAWS SSOアプリでログイン後に、ユーザーと同じDepartmentタグの値をもつインスタンスだけstart/stopできることを確認しました。タグの値が一致しない場合「インスタンス i-xxxxxxxxxx の 開始 に失敗しました」のように権限不足のメッセージが表示されます。ユーザーの属性値Departmentが設定されていて、EC2にタグが存在しない場合やタグのValueがない場合も権限不足のメッセージが表示されました。